package com.orgsync;
import com.algocrafts.conditions.Equals;
import com.algocrafts.converters.FirstMatch;
import com.algocrafts.locators.ElementLocator;
import com.algocrafts.pages.Page;
import com.algocrafts.selenium.Element;
import com.algocrafts.selenium.Locator;
import org.openqa.selenium.By;
import java.util.function.Supplier;
import static com.algocrafts.conditions.ElementPredicates.DISPLAYED;
import static com.algocrafts.conditions.ElementPredicates.NOT_NULL;
import static com.algocrafts.converters.GetText.TEXT;
import static com.algocrafts.converters.OptionalGetter.GET;
import static com.algocrafts.locators.Locators.elements;
import static com.algocrafts.selectors.ClassName.SF_JS_ENABLED;
import static com.algocrafts.selectors.Id.MAIN_NAV;
import static com.algocrafts.selectors.TagName.LI;
import static com.algocrafts.selectors.TagName.UL;
import static org.openqa.selenium.By.linkText;
public class MouseOverLocator implements Locator<Page, Element> {
private final String menuGroup;
private final String menuItem;
public MouseOverLocator(String menuGroup, String menuItem) {
this.menuGroup = menuGroup;
this.menuItem = menuItem;
}
public Element locate(Page page) {
return new ElementLocator<Page>(MAIN_NAV)
.andThen(new ElementLocator<>(SF_JS_ENABLED))
.andThen(elements(LI))
.andThen(new FirstMatch<>(NOT_NULL.and(DISPLAYED).and(TEXT.and(new Equals(menuGroup)))))
.andThen(GET)
.andThen(page.mouseOver())
.andThen(new ElementLocator<>(UL))
.andThen(new ElementLocator<>((Supplier<By>) () -> linkText(menuItem)))
.locate(page);
}
@Override
public String toString() {
return "[" + menuGroup + "->" + menuItem + "]";
}
}